const _ = require('lodash')

function getArea (r) {
  // console.log(arguments)
  return Math.PI * r * r
}
// let getAreaWithMemory = _.memoize(getArea)
// console.log(getAreaWithMemory(4))
// console.log(getAreaWithMemory(4))
// console.log(getAreaWithMemory(4))

//模拟memoize方法的实现,缓存函数。
function memoize(fn){
  let cache={}
  return function(){
    let keys=JSON.stringify(arguments)//这里转化为json其实必要性也不大。
    console.log([...arguments])
    // cache[keys] = cache[keys] || fn.apply(this, arguments)
    cache[keys] = cache[keys] || fn.call(this, ...arguments)
    return cache[keys]
  }
}
console.log(memoize(getArea)(4))